package com.example.emos.wx.db.dao;

import com.example.emos.wx.db.pojo.TbUser;
import org.apache.ibatis.annotations.Mapper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
@SuppressWarnings("all")
@Mapper
public interface TbUserDao {
    /**
     * 查询当前是否有管理员记录
     *
     * @return 1：表示是管理员 0：表示其他用户
     */
    boolean haveRootUser();

    /**
     * 插入用户记录
     *
     * @param param 用户相关参数
     * @return >0,表示插入用户成功
     */
    int insert(HashMap<String, Object> param);

    /**
     * 查询用户OpenID，由于主键是自动生成的，于是我们要编写代码，根据OpenId查询用户ID
     *
     * @param openId 用户的临时授权码
     * @return 返回用户的ID
     */
    Integer searchIdByOpenId(String openId);

    /**
     * 查询用户的权限列表
     * @param userId 用户的id
     * @return 用户权限列表集合
     */
    Set<String> searchUserPermissions(int userId);

    TbUser searchById(int userId);

    /**
     * 查询用户的姓名以及部门名称
     * @param userId 用户ID
     * @return 用户名称以及部门名称
     */
    HashMap<String, String> searchNameAndDept(int userId);

    /**
     * 查询员工的入职日期
     * @param userId 用户id
     * @return 员工入职日期
     */
    String searchUserHiredate(int userId);


    /**
     * 查询用户的概要信息，姓名，头像，部门
     * @param userId 用户ID
     * @return 用户概要信息
     */
    HashMap<String, Object> searchUserSummary(int userId);

    /**
     * 根据员工姓名查询部门
     * @param keyword 姓名关键字
     * @return 员工记录
     */
    ArrayList<HashMap> searchUserGroupByDept(String keyword);

    /**
     * 会议列表选择用户
     * @param param 用户列表
     * @return 用户数据
     */
    ArrayList<HashMap> searchMembers(List param);

    /**
     * 查询管理员信息以及角色信息
     * @param userId 用户id
     * @return 用户数据
     */
    HashMap searchUserInfo(int userId);

    /**
     * 查询所在部门部门经理的ID
     * @param id 用户id
     * @return 部门经理的ID
     */
    int searchDeptManagerId(int id);

    /**
     * 查询总经理ID
     * @return 总经理ID
     */
    int searchGmId();

    /**
     * 工作流发起人与终审者的信息
     * @param param 用户id集合
     * @return 用户的id，姓名，头像
     */
    List<HashMap> selectUserPhotoAndName(List param);

    /**
     * 获取用户签名字符串
     * @param id 用户id
     * @return 以用户邮箱为用户签名字符串
     */
    String searchMemberEmail(int id);

    long searchUserCountInDept(int deptId);

    int searchUserIdByEmail(String email);

    int activeUserAccount(HashMap param);

    int updateUserInfo(HashMap param);

    int deleteUserById(int id);
}